// 包含标准输入输出头文件，用于printf和fprintf函数
#include <stdio.h>
// 包含字符串操作头文件，用于strcmp函数
#include <string.h>
// 包含标准库函数头文件，用于exit函数
#include <stdlib.h>
// 包含目录项操作头文件，用于读取目录内容
#include <dirent.h>
// 包含系统数据类型头文件，用于定义文件类型相关的数据类型
#include <sys/types.h>
// 包含Unix标准函数头文件，用于访问目录和文件
#include <unistd.h>

// 程序入口点
int main(int argc, char *argv[])
{
    // 检查命令行参数数量是否正确（程序名 + 目录路径）
    if (argc != 2)
    {
        // 如果参数数量不正确，打印用法信息到标准错误输出
        fprintf(stderr, "Usage: %s <directory>\n", argv[0]);
        // 退出程序，并返回错误码
        exit(EXIT_FAILURE);
    }

    // 尝试打开命令行参数指定的目录
    DIR *dir = opendir(argv[1]);
    // 如果打开目录失败，打印错误信息并退出程序
    if (!dir)
    {
        perror("opendir");
        exit(EXIT_FAILURE);
    }

    // 定义一个指向dirent结构的指针，用于存储读取的目录项
    struct dirent *entry;
    // 循环读取目录中的每个条目
    while ((entry = readdir(dir)) != NULL)
    {
        // 跳过当前目录（"."）和父目录（".."）的条目
        if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0)
        {
            continue;
        }
        // 打印当前条目的文件名和inode编号
        printf("Filename: %s, Inode: %lu\n", entry->d_name, (unsigned long)entry->d_ino);
    }

    // 关闭目录流，释放系统资源
    closedir(dir);

    // 程序正常退出，返回0
    return 0;
}